package com.blog.controller;

import net.bytebuddy.asm.Advice;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;







/**
 * @RestController用于告诉spring此类用于处理客户端的请求
 */
@RestController
public class UploadController {
    private String uploadDir="D:/file";
    /**
     * 定义处理文件上传业务的方法，这个方法上可以基于
     * PostMapping注解定义，哪些类型（post）以及url（http://ip:port/upload）对应的请求可以交给这个方法处理
     * @param picFile 这个名字要与客户端上传的文件时对应的表单属性名相同,其类型必须为MultipartFile
     *                <input type="file" name="picFice">
     * @return 这个返回值可以为上传成功以后新的文件名。
     */
        @PostMapping ("/upload")
        public String upload(MultipartFile picFile) throws IOException {
            //1.修改文件名（只改前缀，不改后缀）
            //1.1获取原有文件名
            String ofName = picFile.getOriginalFilename();
            //1.2获取原有文件名的后缀（假如aaaa.png，这里就是要获取.png）
            String fileSuffix = ofName.substring(ofName.lastIndexOf("."));
            //1.3构建新的文件名
            String newFileName = UUID.randomUUID()+fileSuffix;
            //2.完成文件上传
            File uploadDirFile=new File(uploadDir);
            if (!uploadDirFile.exists()){
                uploadDirFile.mkdirs();
            }
            picFile.transferTo(new File(uploadDir,newFileName));
            System.out.println("newFileName="+newFileName);
            //3.返回文件存储地址
            return "/"+newFileName;
        }

    /**
     * @DeleteMapping描述方法时，表示这个方法可以处理Delete请求
     * @param name
     */
    @DeleteMapping("/remove")
        public String remove(String name) {
        //构建文件对象
        File file = new File(uploadDir + name);
        //假如文件存在则删除文件
        if (file.exists()) {
            file.delete();
            return "file delete ok";
        }
        return "file not exist";
    }


}
